package cn.snowheart.factory.simplefactory;

import cn.snowheart.factory.component.*;
import cn.snowheart.factory.enums.ComponentType;
import cn.snowheart.factory.enums.FactoryType;

/**
 * 简单工厂模式（非23种设计模式之一）
 * 静态工厂模式 = 简单工厂模式的方法签名改为static
 * 优势：
 * - 将new对象的逻辑与使用对象的逻辑分开，解决变与不变分离的扩展性问题
 * 缺点：
 * - 只是将if-else逻辑移动了位置，如果有一个参数还好；多个参数的话，工厂方法内部将会出现if-else灾难。
 *
 * @author liuwanxiang
 * @version 2019/07/01
 */
public class SimpleComponentFactory {

    public Component createComponent(ComponentType componentType, FactoryType factoryType) {
        Component component = null;
        if (FactoryType.AMD == factoryType) {
            if (ComponentType.CPU == componentType) {
                component = new AMDCPU();
            } else if (ComponentType.GPU == componentType) {
                component = new AMDGPU();
            }
        } else if (FactoryType.INTEL == factoryType) {
            if (ComponentType.CPU == componentType) {
                component = new IntelCPU();
            } else if (ComponentType.GPU == componentType) {
                component = new IntelGPU();
            }
        }
        return component;
    }

}
